module TrackChanges
  module ActionController

    # Sets up an around filter to assign the controller's <tt>current_user</tt>
    # to the given model names that are already set as instance variables in a
    # prior <tt>before_filter</tt>.
    #
    # Example:
    #
    #  track_changes :post
    #  track_changes :post, :post_attribute
    #
    # Currently does not work if the instance variable is anything except
    # an model that has <tt>current_user</tt> accessors.
    def track_changes models, *args
      models_to_track = []
      models_to_track << models
      if args.kind_of?(Array)
        models_to_track << args
      end
      models_to_track.flatten!

      define_method(:__track_changes_to_models) { models_to_track }

      self.class_eval do
        helper :audits
        before_filter TrackChanges::CurrentUserFilter
      end
    end
  end
end

ActionController::Base.extend TrackChanges::ActionController
